1. Field of the Invention
The present invention generally relates to compilation of large projects in a multiprocessing environment, and in particular to such compilation for large Java projects.
2. Background Description
In the prior art large Java projects require lengthy compile times. Solutions for the problem of lengthy compile times for large projects exist in other languages, such as C and C++. These solutions benefit from the fact that those languages do not contain automatic, internal dependency resolution mechanisms. Java uses those mechanisms to ease the process of building Java projects. However, those same mechanisms complicate the process of automatically distributing a compilation of a Java project across multiple systems. Coarse-grained solutions to this problem exist that require the developer or build team to segment the build process by hand. This is time consuming, error prone and will rarely yield the best segmentation solution for large projects.
There are a variety of methods that are used to improve the compilation time for large projects. They include items such as: using higher capacity equipment (memory and processor power); performing conditional compilation effectively through the use of tools such as make, gmake, etc; manually partitioning the large project into isolated subprojects which have no interdependencies and then farming the compilation of these subprojects out to separate machines.
Languages such as C/C++ require the manual creation of a Makefile in order to outline all of the dependencies between the source files in a large system. Since that work is already being done, it becomes easier to segment the builds manually (as in the manual partition of the large project into isolated subprojects). As stated, this is a very error-prone process.
Java's automatic dependency mechanisms complicate this process as the Java compiler automatically compiles what is necessary for recompilation, as opposed to other languages where the dependencies are determined externally from the compiler. So when one attempts to manually segment the Java application and spread the compilation to separate machines—the Java compiler potentially ends up compiling much more than is needed because there is no true knowledge of all of the dependencies. A manual approach is a labor intensive and therefore error prone process, and would be impractical for a large Java project. Therefore there is a need for an automated approach.
U.S. Pat. No. 5,361,357 to Kionka discloses a method and apparatus for optimizing computer file compilation. The invention relates to the large scale compilation of software source code and optimizing the sequence of source code compilations involving source code files residing in numerous different directories. While Kionka attempts to perform optimizations of source code compilation time through the distribution of compilations, it does not provide a system for determining and managing dependencies in a set of files for distributed compilation. Therefore there remains a need for an automated approach for large Java projects that determines and manages dependencies in a set of files and reduces build time by distribution of buildsets to a grid of processors.